home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 176-200 / scopedisk193 / arexx / arexx < prev    next >
Text File  |  1995-03-19  |  8KB  |  150 lines

  1. ARexx
  2. An Introduction by Mathias Sagartz
  3. From the New Mexico Commodore User Group Newsletter - DIMensions
  4.  
  5. The ARexx programming language is about the biggest buzz word being
  6. kicked around in the Amiga community today.
  7.  
  8. Almost every piece of new software, except for games, advertises that it
  9. has an "Arexx port", and Commodore is reported to be including ARexx
  10. with the 2.0 version of the operating system.  It appears that at long
  11. last, we will have a tool that will help us realize the full potential
  12. of the multi-tasking operating system incorporated in our Amigas.
  13.  
  14. Really neat stuff.  Everybody seems to agree on that ... But what is it?
  15.  
  16. The ARexx articles I've read in the Amiga press have not done well at
  17. answering that question -- and others -- for me.  They all seemed to be
  18. written for professional programmers, folks with at least 5 years of
  19. experience.
  20.  
  21. This article is for the rest of us.  It is an attempt to provide some
  22. perspective for our members who have no background or experience with
  23. ARexx.  I also hope to give those of you with an adventuresome spirit a
  24. little nudge toward trying your hand with ARexx.
  25.  
  26. ARexx is a full-fledged computer language, just like Modula2, Fortran, C
  27. and BASIC.  It's a modern language, invented in 1985 by an IBM research
  28. scientist.  Like BASIC, it is an interpreted language, i.e. there is no
  29. separate compile step needed to run an ARexx program.
  30.  
  31. To write an ARexx program, you just make an ASCII file of program
  32. statements with your favorite text editor or word processor.  The
  33. program is run by invoking the interpreter, which marches through the
  34. file and executes the statements sequentially.
  35.  
  36. If you are accustomed to programming in other languages, you'll probably
  37. find ARexx pretty "free form".
  38.  
  39. Some features that are a bit unusual are:
  40.  
  41. Typeless data:
  42. Unlike most other languages, you don't have to classify your variables
  43. as integer, floating point or string, etc.  A variable can have a value
  44. of 7.3 at one point in the program and be redefined later as "Randolph".
  45.  
  46. Variable Arithmetic Precision:
  47. The number of significant digits kept for basic arithmetic operations
  48. (add, subtract, multiply or divide) can be whatever you want them to be.
  49.  If you'd like to keep 87 significant digits, you may do so.  Just don't
  50. expect the program to run very quickly.
  51.  
  52. Built-in Functions for Parsing Input:
  53. Probably the most important feature of ARexx is the parsing capability
  54. built into many of its commands.  It is a simple matter to read a line
  55. from a file and store every\thing on that line up to the first ":" in
  56. one variable, then store everything between the ":" and a "/" in a
  57. second variable, and finally set a third variable equal to whatever is
  58. left over.  You then can use a function to examine each of these
  59. variables and determine the type of information (numeric, binary,
  60. alphabetic, etc.) that is stored in them.
  61.  
  62. Handling of commands for other applications:
  63. During the execution of an ARexx program, if a line of code cannot be
  64. identified as an Arexx instruction, then that instruction is sent
  65. automatically to a "host address".  This means the command is passed as
  66. input to another, predesignated task that is also running at that time.
  67.  
  68. All that is well and good, but I did say this was not going to be one of
  69. those articles written specifically for programmers, didn't I?  For most
  70. of us, the great strength of ARexx is its ability to communicate easily
  71. with other tasks running concurrently on the system.  This communication
  72. takes place through magical things called message ports.  The nice thing
  73. about these ports is that in order to use them, you don't need to know
  74. very much about them.  When a program that has an ARexx port begins
  75. execution, it opens a port that can be used to transfer information
  76. between itself and an ARexx program.
  77.  
  78. ARexx constantly monitors the system and keeps a list of all the ports
  79. that are open and available for use.  For the curious, there is an ARexx
  80. command that displays a list of these ports on the screen.  The names of
  81. the ports usually are chosen so that they can be identified easily with
  82. their parent program.
  83.  
  84. Let's assume ARexx is being used to write "macro" commands for an
  85. application.  (Simply put, a macro command is a sequence of commands for
  86. an application that are grouped together and stored as an entity.)  To
  87. perform this sequence of commands, the user need not type each command
  88. separately.  All he/she has to do is to issue one command that invokes
  89. he macro, and the sequence of commands is executed automatically.
  90.  
  91. What makes ARexx useful for writing macros is that an ARexx macro need
  92. not be dumb.  An ARexx macro normally is executed one command at a time.
  93.  The first command is sent to the host, and the macro then waits for the
  94. host to send back a message that indicates whether the command was
  95. executed successfully.  The host also can pass back information about
  96. the results of the command, and logic programmed into the ARexx macro
  97. can adjust what the macro sends back to the host as the next command.
  98.  
  99. For host programs that get their user input from command lines, the
  100. ARexx macro will look very much like a sequence of these commands,
  101. perhaps with some logic-type statements mixed in to provide the smarts
  102. for the macro.  However, many host programs get input from information
  103. typed into requestor boxes or mouse selection of menu items.  The
  104. authors of these programs must provide a set of "command descriptions"
  105. that specify the syntax for the messages ARexx can send to the host to
  106. provide equivalent input.
  107.  
  108. Another element of flexibility provided by an ARexx program is that it
  109. is not restricted to communicating with only one host program.  An
  110. "address" statement can direct a command to any of the available message
  111. ports.  By using several different ports, ARexx can take information
  112. from one host, edit it, modify it, and send the result as input to a
  113. different host.  In effect, it can become a master controller that
  114. unifies different host programs so they can work together.  As you can
  115. see, ARexx applications can get as sophisticated as you choose to make
  116. them.
  117.  
  118. The user's manual furnished with ARexx is complete, but it is very
  119. condensed.  It is written well, but it definitely is not intended for
  120. the novice programmer.  For those who are interested, there is a good
  121. beginner-level book entitled "Modern Programming Using Rexx" by O'Hara
  122. and Gomberg (Prentice-Hall).  The authors presume their audience will be
  123. programming on an IBM mainframe, but very little is machine specific. 
  124. Comparing this book with the user's manual shows that ARexx indeed is a
  125. complete implementation of the Rexx programming language.
  126.  
  127. Commodore itself also should be a source for ARexx information.  The
  128. manufacturer certainly will include some sort of basic-level ARexx
  129. reference with the 2.0 operating system update.
  130.  
  131. Time will tell.  As an aid to those who want to try their hands with
  132. ARexx, I've included a copy of a short program that can be used to try
  133. ARexx commands.  The Rexxtry program was copied out of the O'Hara and
  134. Gomberg reference.  Essentially, it will let you do what the immediate
  135. mode does for AmigaBasic.  Enter a line of code, and when you hit
  136. return, the line will be executed.
  137.  
  138. Enjoy!
  139.  
  140. /* program to execute a single line of Rexx code from O'Hara and Gomberg */
  141.  
  142. say "Rexxtry allow you to interactively execute Rexx instructions."
  143. say "Each instruction string is executed when you press enter."
  144. say "To end, enter exit."
  145. do forever /* the exit instruction will terminate the loop */
  146.   say "Rexxtry"
  147.   parse pull @line@
  148.   interpret @line@
  149. end
  150.